package com.xxl.job.admin.core.util;

import cn.hutool.core.util.StrUtil;
import org.noear.solon.core.NvMap;
import org.noear.solon.core.handle.Context;

import java.util.Map;

/**
 * Cookie.Util
 *
 * @author xuxueli 2015-12-12 18:01:06
 */
public class CookieUtil {

	// 默认缓存时间,单位/秒, 2H
	private static final int COOKIE_MAX_AGE = Integer.MAX_VALUE;
	// 保存路径,根路径
	private static final String COOKIE_PATH = "/";

	/**
	 * 保存
	 *
	 * @param context    上下文
	 * @param key
	 * @param value
	 * @param ifRemember 如果记得话
	 * @author xieshuang
	 * @since 2024/06/03
	 */
	public static void set(Context context, String key, String value, boolean ifRemember) {
		int age = ifRemember?COOKIE_MAX_AGE:-1;
		set(context, key, value, null, COOKIE_PATH, age, true);
	}

	/**
	 * 保存
	 *
	 * @param context    上下文
	 * @param key
	 * @param value
	 * @param domain     域
	 * @param path       路径
	 * @param maxAge     最大老化时间
	 * @param isHttpOnly 仅限http
	 * @author xieshuang
	 * @since 2024/06/03
	 */
	private static void set(Context context, String key, String value, String domain, String path, int maxAge, boolean isHttpOnly) {
		context.cookieSet(key, value, domain, path, maxAge);
	}

	/**
	 * 查询value
	 *
	 * @param context 上下文
	 * @param key
	 * @return
	 * @author xieshuang
	 * @since 2024/06/03
	 */
	public static String getValue(Context context, String key) {
		NvMap nvMap = context.cookieMap();
		for (Map.Entry<String, String> stringStringEntry : nvMap.entrySet()) {
			if (stringStringEntry.getKey().equals(key)) {
				return stringStringEntry.getValue();
			}
		}
		return null;
	}

	/**
	 * 删除Cookie
	 *
	 * @param context 上下文
	 * @param key     关键
	 * @author xieshuang
	 * @since 2024/06/03
	 */
	public static void remove(Context context, String key) {
		String value = getValue(context, key);
		if (StrUtil.isNotBlank(value)) {
			set(context, key, "", null, COOKIE_PATH, 0, true);
		}
	}

}